#include <vector>
#include <memory>
#include <string>

namespace qing {
    class Layer {
    public:
        virtual ~Layer() = default;
        
        // 前向传播
        virtual std::vector<double> forward(const std::vector<double>& input) = 0;
        
        // 反向传播
        virtual std::vector<double> backward(const std::vector<double>& grad_output) = 0;
        
        // 更新参数
        virtual void update_parameters(double learning_rate) = 0;
        
        // 获取层类型名称
        virtual std::string get_layer_type() const = 0;
        
        // 获取输入维度
        virtual int get_input_dim() const = 0;
        
        // 获取输出维度
        virtual int get_output_dim() const = 0;
        
        // 设置训练/测试模式（对于Dropout、BatchNorm等层有用）
        virtual void set_training(bool training) { /* 默认实现 */ }
        
        // 获取参数数量
        virtual int get_parameter_count() const { return 0; }
    };
}